package com.gw.business.analysis.task;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.gw.business.analysis.model.UserTrackBasic;
import com.gw.business.analysis.model.UserTrackDataException;
import com.gw.business.analysis.service.UserTrackBasicService;
import com.gw.business.common.util.DateUtil;
import com.gw.platform.logger.Log;
import com.gw.platform.service.IService;

/**
 * 
 * 类功能:用户访问点击一场任务（1分钟内访问数量超过10次.包含10）
 *  
 * <p>
 * 创建者:关博
 * </p>
 * <p>
 * 创建时间:2015-03-02
 * </p>
 * <p>
 * 修改者:
 * </p>
 * <p>
 * 修改时间:
 * </p>
 * <p>
 * 修改原因：
 * </p>
 * <p>
 * 审核者:
 * </p>
 * <p>
 * 审核时间:
 * </p>
 * <p>
 * 审核意见：
 * </p>
 * 
 */
@Component
public class UserTrackDataExceptionTask {
	
	@Resource
	private UserTrackBasicService  userTrackBasicService;
	
	@Resource
	private IService defaultService;
	
	/**
	 * 30分钟
	 */
	private final int MINUTES = 30;
	
	/**单位：秒 
	 * 1分钟 访问时长的范围
	 */
	private final int SECONDS = 1000 * 60;
	
	
	/**
	 * 通过分析 basic
	 * 任务每间隔30分钟执行一次
	 */
	//@Scheduled(cron = "* 0/5 * * * ?")
	@Scheduled(cron = "0/120 * * * * ?")
    public void InitDate(){
        Log.info(this.getClass(), "UserTrackDataExceptionTask开始-->");
        long start = System.currentTimeMillis();

        //时间间隔（当前时间30分钟之前的数据）
        Date  halfTime=DateUtil.addMinutes(new Date(), -MINUTES);
        String strHalfTime=DateUtil.toYyyymmddHhmmss(halfTime);
        //获取基础数据列表，visit_time（数据结构字段）大于当前时间-MIN时间的异常数据（用户每分钟超过10次点击）
        List<UserTrackBasic> basicItemList = userTrackBasicService.getClickExceptionData(strHalfTime);

        //旧数据数据列表（key 用户ID）
        Map<String,UserTrackDataException> exceptionOldMap = new HashMap<String, UserTrackDataException>();

        //获取已存在的异常数据
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("endTime", strHalfTime);
        List<UserTrackDataException> exceptionOldList = (List<UserTrackDataException>) defaultService.find("getOldList",parameters);

        //存储旧数据，这是新旧对象对比的关键  key：userid
        for (UserTrackDataException d : exceptionOldList) {
            exceptionOldMap.put(d.getUserId()+"_"+DateUtil.getDateFormat(d.getDataTime(), "yyyy-MM-dd HH:mm:ss"),d);
        }


        //存储异常数据
        List<UserTrackDataException> endInsertList = new ArrayList<UserTrackDataException>();

        for(UserTrackBasic v:basicItemList){
            String key = v.getUserId()+"_"+DateUtil.getDateFormat(v.getVisitTime(), "yyyy-MM-dd HH:mm:ss");
            if(exceptionOldMap.containsKey(key))
                continue;
            UserTrackDataException userTrackDataException = new UserTrackDataException();
            userTrackDataException.setUserId(v.getUserId());
            userTrackDataException.setDataTime(v.getVisitTime());
            userTrackDataException.setIp(v.getIp());
            userTrackDataException.setUrl(v.getUrl());
            endInsertList.add(userTrackDataException);
        }


        Log.info(this.getClass(), "endInsertList-->" + endInsertList.size());

        if(endInsertList.size() > 0){
            defaultService.insert("UserTrackDataException_inset", endInsertList);
        }

        Log.info(this.getClass(), "UserTrackDataExceptionTask结束，执行时间(s)：-->" + (System.currentTimeMillis()-start)/1000);

    }
}
